/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cursoexperto.jftf.jsf.pack;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.el.ELContext;
import javax.faces.context.FacesContext;
import org.cursoexperto.jftf.controller.LineaVentaJpaController;
import org.cursoexperto.jftf.controller.VentaJpaController;
import org.cursoexperto.jftf.entidades.Producto;
import org.cursoexperto.jftf.entidades.Venta;
import org.cursoexperto.jftf.entidades.LineaVenta;

/**
 *
 * @author Jose Fernando
 */
public class VentaController {

    public VentaController() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        importeTotalBig = new BigDecimal(BigInteger.ZERO);
        jpaController = (VentaJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "ventaJpa");
        jpaLineaVentaController = (LineaVentaJpaController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "lineaVentaJpa");
    }
    private Producto producto = null;
    private List<Venta> historicoVentas = null;
    private Venta venta = null;
    private BigDecimal importeTotalBig;
    private VentaJpaController jpaController;
    private LineaVentaJpaController jpaLineaVentaController;

    public Producto getProducto() {
        if (producto == null) {
            producto = new Producto();
        }
        return producto;
    }

    /**
     * Busca el historico de compras de un cliente y lo almacena en el bean
     * @return Devuelve la redireccion
     */
    public String buscaHistorico() {
        String usuario;
        FacesContext facesContext = FacesContext.getCurrentInstance();
        usuario = ((ClienteController) facesContext.getApplication().getELResolver().getValue(facesContext.getELContext(), null, "cliente")).getCliente().getUsuario();
        setHistoricoVentas(jpaController.findByUsuario(usuario));
        return "misCompras";
    }

    /**
     * Para una compra realizada por un cliente, devuelve los productos que se
     * compraron
     * @return Devuelve la redireccion
     */
    public String verLineaCompra() {
        List<LineaVenta> lAux = null;
        ELContext elContext = FacesContext.getCurrentInstance().getELContext();
        setVenta((Venta) FacesContext.getCurrentInstance().getApplication().getELResolver().getValue(elContext, null, "item"));
        lAux = jpaLineaVentaController.findLineaVentaByVenta(getVenta().getId());
        getVenta().setLineaVentaList(lAux);
        if (getVenta() == null) {
            setVenta(new Venta());
        }
        calculaImporteTotal();
        return "verLineaC";
    }

    /**
     * @return the historicoVentas
     */
    public List<Venta> getHistoricoVentas() {
        return historicoVentas;
    }

    /**
     * @param historicoVentas the historicoVentas to set
     */
    public void setHistoricoVentas(List<Venta> historicoVentas) {
        this.historicoVentas = historicoVentas;
    }

    /**
     * @return the venta
     */
    public Venta getVenta() {
        return venta;
    }

    /**
     * @param venta the venta to set
     */
    public void setVenta(Venta venta) {
        this.venta = venta;
    }

    /**
     * Calcula el importe total de la venta almacenada en el historico
     * @return Devuelve la redireccion
     */
    public void calculaImporteTotal() {
        BigDecimal importeAuxBig = new BigDecimal(0);
        for (LineaVenta p : venta.getCarroCompra()) {
            importeAuxBig = importeAuxBig.add(p.getPrecio().multiply(new BigDecimal(p.getCantidad())));
        }
        setImporteTotalBig(importeAuxBig);
    }

    /**
     * @return the importeTotalBig
     */
    public BigDecimal getImporteTotalBig() {
        return importeTotalBig;
    }

    /**
     * @param importeTotalBig the importeTotalBig to set
     */
    public void setImporteTotalBig(BigDecimal importeTotalBig) {
        this.importeTotalBig = importeTotalBig;
    }
}
